package com.zhonghui.mes.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import cn.hutool.core.bean.BeanUtil;
import com.mchange.v2.beans.BeansUtils;
import com.zhonghui.mes.domain.MesProductMaterialItem;
import com.zhonghui.mes.domain.vo.MesProductVo;
import com.zhonghui.mes.mapper.MesProductMaterialItemMapper;
import com.zhonghui.wms.domain.WmsMaterial;
import com.zhonghui.wms.mapper.WmsMaterialMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zhonghui.mes.mapper.MesProductMapper;
import com.zhonghui.mes.domain.MesProduct;
import com.zhonghui.mes.service.IMesProductService;

/**
 * 制造执行MES-产品建模Service业务层处理
 * 
 * @author zhonghui
 * @date 2024-04-23
 */
@Service
public class MesProductServiceImpl implements IMesProductService 
{
    @Autowired
    private MesProductMapper mesProductMapper;
    @Autowired
    WmsMaterialMapper wmsMaterialMapper;
    @Autowired
    MesProductMaterialItemMapper mesProductMaterialItemMapper;

    /**
     * 查询制造执行MES-产品建模
     * 
     * @param id 制造执行MES-产品建模主键
     * @return 制造执行MES-产品建模
     */
    @Override
    public MesProductVo selectMesProductById(Long id)
    {

        MesProductVo mesProductVo = mesProductMapper.selectMesProductById(id);
        mesProductVo.setMaterialList(new ArrayList<WmsMaterial>());
        MesProductMaterialItem item = new MesProductMaterialItem();
        item.setProductId(id);
        List<MesProductMaterialItem> mesProductMaterialItems = mesProductMaterialItemMapper.selectMesProductMaterialItemList(item);
        mesProductMaterialItems.forEach(val->{
            WmsMaterial wmsMaterial = wmsMaterialMapper.selectWmsMaterialById(val.getMaterialId());
            if (wmsMaterial != null)
                mesProductVo.getMaterialList().add(wmsMaterial);
        });
        return mesProductVo;
    }

    /**
     * 查询制造执行MES-产品建模列表
     * 
     * @param mesProduct 制造执行MES-产品建模
     * @return 制造执行MES-产品建模
     */
    @Override
    public List<MesProductVo> selectMesProductList(MesProductVo mesProduct)
    {
        return mesProductMapper.selectMesProductList(mesProduct);
    }

    /**
     * 新增制造执行MES-产品建模
     * 
     * @param mesProductVo 制造执行MES-产品建模
     * @return 结果
     */
    @Override
    public int insertMesProduct(MesProductVo mesProductVo)
    {
        MesProduct mesProduct = new MesProduct();
        BeanUtil.copyProperties(mesProductVo,mesProduct);
        int result = mesProductMapper.insertMesProduct(mesProduct);
        mesProductVo.getMaterialList().stream().map(material -> {
            MesProductMaterialItem item = new MesProductMaterialItem();
            item.setProductId(mesProduct.getId());
            item.setMaterialId(material.getId());
            item.setRemark(material.getRemark());
            return item;
        }).forEach(mesProductMaterialItemMapper::insertMesProductMaterialItem);
        return result;
    }

    /**
     * 修改制造执行MES-产品建模
     * 
     * @param mesProductVo 制造执行MES-产品建模
     * @return 结果
     */
    @Override
    public int updateMesProduct(MesProductVo mesProductVo)
    {
        MesProduct mesProduct = new MesProduct();
        BeanUtil.copyProperties(mesProductVo,mesProduct);
        mesProductMaterialItemMapper.deleteMesProductMaterialItemByProductId(mesProductVo.getId());
        mesProductVo.getMaterialList().stream().map(material -> {
            MesProductMaterialItem item = new MesProductMaterialItem();
            item.setProductId(mesProductVo.getId());
            item.setMaterialId(material.getId());
            item.setRemark(material.getRemark());

            return item;
        }).forEach(mesProductMaterialItemMapper::insertMesProductMaterialItem);
        return mesProductMapper.updateMesProduct(mesProduct);
    }

    /**
     * 批量删除制造执行MES-产品建模
     * 
     * @param ids 需要删除的制造执行MES-产品建模主键
     * @return 结果
     */
    @Override
    public int deleteMesProductByIds(Long[] ids)
    {
        return mesProductMapper.deleteMesProductByIds(ids);
    }

    /**
     * 删除制造执行MES-产品建模信息
     * 
     * @param id 制造执行MES-产品建模主键
     * @return 结果
     */
    @Override
    public int deleteMesProductById(Long id)
    {
        return mesProductMapper.deleteMesProductById(id);
    }
}
